﻿package com.firewolf.sington.allsingtons;
/**
 * 最终版的单例模式，避免了多线程导致的混乱，同时也避免了同步方法造成的性能低的问题
 * @author liuxing0
 * @function
 * @createtime 2014-9-10
 */
public class FinalSington {
	private volatile static FinalSington uniqueInstance;  //voltatile关键字确保：当uniqueInstance变量被初始化成FinalSington的
														  //的实例时，多个线程可以正确的处理uniqueInstance变量
	private FinalSington(){}
	public static FinalSington getInstance(){   
		if(uniqueInstance == null){  //检查实例，如果不存在，进进入同步块
			synchronized (FinalSington.class) { //只有第一次才会彻底的执行这里面的代码
				if(uniqueInstance == null) //进入同步区域后，再次检查，如果是null，才会创建实例
					uniqueInstance = new FinalSington();
			}
		}
		return uniqueInstance;
	}
	
	/////////////////////////////////
	/**other methods**/
	
	public void description(){
		System.out.println("xxxx,我是考虑的最多的单例模式，如果考虑了多线程，而且也很注重效率的话，就用我吧！！！");
	}
}
